package gui.managedbeans;

import java.util.Date;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import Basicas.Apartamento;
import Basicas.Hospedagem;
import Basicas.Pagamento;
import Basicas.Usuario;
import BasicasEnum.SituacaoApartamento;
import BasicasEnum.TipoPagamento;
import Exception.AlterarException;
import Exception.ApartamentoJaExisteException;
import Exception.InserirException;
import Fachada.Fachada;

@ManagedBean
@ViewScoped
public class PagamentoBean {
	
	public PagamentoBean(){
		
		pagamento = new Pagamento();
	} 
	
	@ManagedProperty("#{beanLogin.usuarioLogado}")
	private Usuario usuarioLogado;
	
	@ManagedProperty("#{hospedagemBean.apartamentoSelecionado}")
	private Apartamento apartamentoSelecionado;
	
	@ManagedProperty("#{hospedagemBean.hospedagem}")
	private Hospedagem hospedagem;
	
	private Pagamento pagamento;
	
	@SuppressWarnings("unused")
	private TipoPagamento[] tipopagamento;
	
	//get e set
	public Usuario getUsuarioLogado() {
		return usuarioLogado;
	}
	public void setUsuarioLogado(Usuario usuarioLogado) {
		this.usuarioLogado = usuarioLogado;
	}
	public Apartamento getApartamentoSelecionado() {
		return apartamentoSelecionado;
	}
	public void setApartamentoSelecionado(Apartamento apartamentoSelecionado) {
		this.apartamentoSelecionado = apartamentoSelecionado;
	}
	public Hospedagem getHospedagem() {
		return hospedagem;
	}
	public void setHospedagem(Hospedagem hospedagem) {
		this.hospedagem = hospedagem;
	}
	
	public Pagamento getPagamento() {
		return pagamento;
	}
	public void setPagamento(Pagamento pagamento) {
		this.pagamento = pagamento;
	}
	
	public TipoPagamento[] getTipopagamento() {
		return TipoPagamento.values();
	}
	public void setTipopagamento(TipoPagamento[] tipopagamento) {
		this.tipopagamento = tipopagamento;
	}

	//metodo para encerrar a conta
	
	public String pagar() throws InserirException{
		
		this.hospedagem.setResponsavel(this.usuarioLogado);
		this.hospedagem.setDataModificacao(new Date());
		this.hospedagem.getTempoOcupacao().setSaidaRealizada(new Date());
		this.pagamento.setResponsavel(this.usuarioLogado);
		this.pagamento.setDataCriacao(new Date());
		this.pagamento.setDataModificacao(new Date());
		try {
			this.apartamentoSelecionado.setSituacaoApartamento(SituacaoApartamento.Em_Limpeza);
			Fachada.getFachada().apartamentoAlterar(apartamentoSelecionado);			
			Fachada.getFachada().pagar(this.pagamento);
			FacesContext.getCurrentInstance().addMessage("messages", new FacesMessage(FacesMessage.SEVERITY_INFO,"Conta Encerrada!",""));
			pagamento = new Pagamento();
	        return "/hospedagem/realizarHospedagem.xhtml?faces-redirect=true";
		} catch (InserirException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (AlterarException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ApartamentoJaExisteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;	
	}
	public void fazerConta(){
		pagamento = new Pagamento();
		try {
			Fachada.getFachada().fazerConta(this.pagamento,this.hospedagem);
		} catch (InserirException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
